package com.red.springmanual.usespring;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import java.util.concurrent.locks.LockSupport;

public class Test {

    /**
     * UserService.class --> 推断构造方法-->普通对象-->依赖注入-->初始化前->初始化->初始化后（AOP）->代理对象->放入Map（单例池）->bean 对象
     *
     * userService对象 -> userService代理对象 -> userService代理对象.target=普通对象
     *
     * class UserServiceProxy extends UserService{
     *     Userservice target;
     *
     *     public void test(){
     *         // @Transactional
     *         // 开启事物
     *         1.事物管理器新建一个数据库链接conn  ThreadLocal<Map<Datasource,conn>
     *         2.conn.autocommit = false
     *         target.test(); // 普通对象.test() jdbctemplate sql1 sql2
     *         3.conn.commit();
     *     }
     * }
     * @param args
     */

    public static void main(String[] args) {
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);

        // bean 对象
        UserServiceInterface userService = (UserServiceInterface)applicationContext.getBean("userService");
        System.out.println(userService);
        userService.test();
//        LockSupport.park();
    }
}
